package com.jinwei.qunguanjia.system.service;

import com.jinwei.qunguanjia.system.dto.SysMenuDTO;

import java.util.List;
import java.util.Set;

public interface SysMenuService {
    /**
     * 保存接口
     * @param sysMenuDTO 对象
     */
    void save(SysMenuDTO sysMenuDTO);

    /**
     * 根据主键id删除接口
     * @param id 主键
     */
    void remove(String id);

    /**
     *  根据主键id修改接口
     * @param sysMenuDTO 对象
     */
    void update(SysMenuDTO sysMenuDTO);

    /**
     *  根据主键id获取单条详细
     * @param id 主键
     * @return SysMenuDTO 对象
     */
    SysMenuDTO get(String id);

    /**
     *  根据查询条件获取单条详细
     * @param sysMenuDTO 对象条件
     * @return SysMenuDTO 对象
     */
    SysMenuDTO get(SysMenuDTO sysMenuDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取总数
     * @param sysMenuDTO 对象条件
     * @return 总数
     */
    Long count(SysMenuDTO sysMenuDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取列表
     * @param sysMenuDTO 对象
     * @return list结果
     */
    List<SysMenuDTO> list(SysMenuDTO sysMenuDTO) throws IllegalAccessException;
    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> listMenuPermsByUserId(String userId);

    /**
     * 根据用户查询系统菜单列表
     *
     * @param sysMenuDTO 菜单信息
     * @return 菜单列表
     */
    List<SysMenuDTO> listMenu(SysMenuDTO sysMenuDTO) throws IllegalAccessException;

    /**
     * 根据用户ID查询菜单树信息
     *
     * @return 菜单列表
     */
    List<SysMenuDTO> listMenuTreeByUserId() throws IllegalAccessException;

    /**
     * 根据角色ID查询菜单树信息
     *
     * @param roleId 角色ID
     * @return 选中菜单列表
     */
    List<String> listMenuByRoleId(String roleId);

    /**
     * 校验菜单名称是否唯一
     *
     * @param sysMenuDTO 菜单信息
     * @return 结果
     */
    String checkMenuNameUnique(SysMenuDTO sysMenuDTO) throws IllegalAccessException;

    /**
     * 是否存在菜单子节点
     *
     * @param menuId 菜单ID
     * @return 结果 true 存在 false 不存在
     */
    boolean hasChildByMenuId(String menuId) throws IllegalAccessException;

    /**
     * 查询菜单是否存在角色
     *
     * @param menuId 菜单ID
     * @return 结果 true 存在 false 不存在
     */
    boolean checkMenuExistRole(String menuId);

}
